/** layui-v2.5.5 MIT License By https://www.layui.com */
;layui.define("layer", function(e) {
    "use strict";
    var t = layui.$
      , i = layui.layer
      , n = layui.hint()
      , o = layui.device()
      , a = {
        config: {},
        set: function(e) {
            var i = this;
            return i.config = t.extend({}, i.config, e),
            i
        },
        on: function(e, t) {
            return layui.onevent.call(this, r, e, t)
        }
    }
      , l = function() {
        var e = this;
        return {
            upload: function(t) {
                e.upload.call(e, t)
            },
            reload: function(t) {
                e.reload.call(e, t)
            },
            config: e.config
        }
    }
      , r = "upload"
      , u = "layui-upload-file"
      , c = "layui-upload-form"
      , f = "layui-upload-iframe"
      , s = "layui-upload-choose"
      , p = function(e) {
        var i = this;
        i.config = t.extend({}, i.config, a.config, e),
        i.render()
    };
    p.prototype.config = {
        accept: "images",
        exts: "",
        auto: !0,
        bindAction: "",
        url: "",
        field: "file",
        acceptMime: "",
        method: "post",
        data: {},
        drag: !0,
        size: 0,
        number: 0,
        multiple: !1
    },
    p.prototype.render = function(e) {
        var i = this
          , e = i.config;
        e.elem = t(e.elem),
        e.bindAction = t(e.bindAction),
        i.file(),
        i.events()
    }
    ,
    p.prototype.file = function() {
        var e = this
          , i = e.config
          , n = e.elemFile = t(['<input class="' + u + '" type="file" accept="' + i.acceptMime + '" name="' + i.field + '"', i.multiple ? " multiple" : "", ">"].join(""))
          , a = i.elem.next();
        (a.hasClass(u) || a.hasClass(c)) && a.remove(),
        o.ie && o.ie < 10 && i.elem.wrap('<div class="layui-upload-wrap"></div>'),
        e.isFile() ? (e.elemFile = i.elem,
        i.field = i.elem[0].name) : i.elem.after(n),
        o.ie && o.ie < 10 && e.initIE()
    }
    ,
    p.prototype.initIE = function() {
        var e = this
          , i = e.config
          , n = t('<iframe id="' + f + '" class="' + f + '" name="' + f + '" frameborder="0"></iframe>')
          , o = t(['<form target="' + f + '" class="' + c + '" method="post" key="set-mine" enctype="multipart/form-data" action="' + i.url + '">', "</form>"].join(""));
        t("#" + f)[0] || t("body").append(n),
        i.elem.next().hasClass(c) || (e.elemFile.wrap(o),
        i.elem.next("." + c).append(function() {
            var e = [];
            return layui.each(i.data, function(t, i) {
                i = "function" == typeof i ? i() : i,
                e.push('<input type="hidden" name="' + t + '" value="' + i + '">')
            }),
            e.join("")
        }()))
    }
    ,
    p.prototype.msg = function(e) {
        return i.msg(e, {
            icon: 2,
            shift: 6
        })
    }
    ,
    p.prototype.isFile = function() {
        var e = this.config.elem[0];
        if (e)
            return "input" === e.tagName.toLocaleLowerCase() && "file" === e.type
    }
    ,
    p.prototype.preview = function(e) {
        var t = this;
        window.FileReader && layui.each(t.chooseFiles, function(t, i) {
            var n = new FileReader;
            n.readAsDataURL(i),
            n.onload = function() {
                e && e(t, i, this.result)
            }
        })
    }
    ,
    p.prototype.upload = function(e, i) {
        var n, a = this, l = a.config, r = a.elemFile[0], u = function() {
            var i = 0
              , n = 0
              , o = e || a.files || a.chooseFiles || r.files
              , u = function() {
                l.multiple && i + n === a.fileLength && "function" == typeof l.allDone && l.allDone({
                    total: a.fileLength,
                    successful: i,
                    aborted: n
                })
            };
            layui.each(o, function(e, o) {
                var r = new FormData;
                r.append(l.field, o),
                layui.each(l.data, function(e, t) {
                    t = "function" == typeof t ? t() : t,
                    r.append(e, t)
                }),
                t.ajax({
                    url: l.url,
                    type: "post",
                    data: r,
                    contentType: !1,
                    processData: !1,
                    dataType: "json",
                    headers: l.headers || {},
                    success: function(t) {
                        i++,
                        d(e, t),
                        u()
                    },
                    error: function() {
                        n++,
                        a.msg("请求上传接口出现异常"),
                        m(e),
                        u()
                    },
                    xhr: function() {
                        var e = new XMLHttpRequest;
                        return e.upload.addEventListener("progress", function(e) {
                            if (e.lengthComputable) {
                                var t = Math.floor(e.loaded / e.total * 100);
                                "function" == typeof l.progress && l.progress(t, e)
                            }
                        }),
                        e
                    }
                })
            })
        }, c = function() {
            var e = t("#" + f);
            a.elemFile.parent().submit(),
            clearInterval(p.timer),
            p.timer = setInterval(function() {
                var t, i = e.contents().find("body");
                try {
                    t = i.text()
                } catch (n) {
                    a.msg("获取上传后的响应信息出现异常"),
                    clearInterval(p.timer),
                    m()
                }
                t && (clearInterval(p.timer),
                i.html(""),
                d(0, t))
            }, 30)
        }, d = function(e, t) {
            if (a.elemFile.next("." + s).remove(),
            r.value = "",
            "object" != typeof t)
                try {
                    t = JSON.parse(t)
                } catch (i) {
                    return t = {},
                    a.msg("请对上传接口返回有效JSON")
                }
            "function" == typeof l.done && l.done(t, e || 0, function(e) {
                a.upload(e)
            })
        }, m = function(e) {
            l.auto && (r.value = ""),
            "function" == typeof l.error && l.error(e || 0, function(e) {
                a.upload(e)
            })
        }, h = l.exts, v = function() {
            var t = [];
            return layui.each(e || a.chooseFiles, function(e, i) {
                t.push(i.name)
            }),
            t
        }(), g = {
            preview: function(e) {
                a.preview(e)
            },
            upload: function(e, t) {
                var i = {};
                i[e] = t,
                a.upload(i)
            },
            pushFile: function() {
                return a.files = a.files || {},
                layui.each(a.chooseFiles, function(e, t) {
                    a.files[e] = t
                }),
                a.files
            },
            resetFile: function(e, t, i) {
                var n = new File([t],i);
                a.files = a.files || {},
                a.files[e] = n
            }
        }, y = function() {
            if ("choose" !== i && !l.auto || (l.choose && l.choose(g),
            "choose" !== i))
                return l.before && l.before(g),
                o.ie ? o.ie > 9 ? u() : c() : void u()
        };
        if (v = 0 === v.length ? r.value.match(/[^\/\\]+\..+/g) || [] || "" : v,
        0 !== v.length) {
            switch (l.accept) {
            case "file":
                if (h && !RegExp("\\w\\.(" + h + ")$", "i").test(escape(v)))
                    return a.msg("选择的文件中包含不支持的格式"),
                    r.value = "";
                break;
            case "video":
                if (!RegExp("\\w\\.(" + (h || "avi|mp4|wma|rmvb|rm|flash|3gp|flv") + ")$", "i").test(escape(v)))
                    return a.msg("选择的视频中包含不支持的格式"),
                    r.value = "";
                break;
            case "audio":
                if (!RegExp("\\w\\.(" + (h || "mp3|wav|mid") + ")$", "i").test(escape(v)))
                    return a.msg("选择的音频中包含不支持的格式"),
                    r.value = "";
                break;
            default:
                if (layui.each(v, function(e, t) {
                    RegExp("\\w\\.(" + (h || "jpg|png|gif|bmp|jpeg$") + ")", "i").test(escape(t)) || (n = !0)
                }),
                n)
                    return a.msg("选择的图片中包含不支持的格式"),
                    r.value = ""
            }
            if (a.fileLength = function() {
                var t = 0
                  , i = e || a.files || a.chooseFiles || r.files;
                return layui.each(i, function() {
                    t++
                }),
                t
            }(),
            l.number && a.fileLength > l.number)
                return a.msg("同时最多只能上传的数量为：" + l.number);
            if (l.size > 0 && !(o.ie && o.ie < 10)) {
                var F;
                if (layui.each(a.chooseFiles, function(e, t) {
                    if (t.size > 1024 * l.size) {
                        var i = l.size / 1024;
                        i = i >= 1 ? i.toFixed(2) + "MB" : l.size + "KB",
                        r.value = "",
                        F = i
                    }
                }),
                F)
                    return a.msg("文件不能超过" + F)
            }
            y()
        }
    }
    ,
    p.prototype.reload = function(e) {
        e = e || {},
        delete e.elem,
        delete e.bindAction;
        var i = this
          , e = i.config = t.extend({}, i.config, a.config, e)
          , n = e.elem.next();
        n.attr({
            name: e.name,
            accept: e.acceptMime,
            multiple: e.multiple
        })
    }
    ,
    p.prototype.events = function() {
        var e = this
          , i = e.config
          , a = function(t) {
            e.chooseFiles = {},
            layui.each(t, function(t, i) {
                var n = (new Date).getTime();
                e.chooseFiles[n + "-" + t] = i
            })
        }
          , l = function(t, n) {
            var o = e.elemFile
              , a = t.length > 1 ? t.length + "个文件" : (t[0] || {}).name || o[0].value.match(/[^\/\\]+\..+/g) || [] || "";
            o.next().hasClass(s) && o.next().remove(),
            e.upload(null, "choose"),
            e.isFile() || i.choose || o.after('<span class="layui-inline ' + s + '">' + a + "</span>")
        };
        i.elem.off("upload.start").on("upload.start", function() {
            var o = t(this)
              , a = o.attr("lay-data");
            if (a)
                try {
                    a = new Function("return " + a)(),
                    e.config = t.extend({}, i, a)
                } catch (l) {
                    n.error("Upload element property lay-data configuration item has a syntax error: " + a)
                }
            e.config.item = o,
            e.elemFile[0].click()
        }),
        o.ie && o.ie < 10 || i.elem.off("upload.over").on("upload.over", function() {
            var e = t(this);
            e.attr("lay-over", "")
        }).off("upload.leave").on("upload.leave", function() {
            var e = t(this);
            e.removeAttr("lay-over")
        }).off("upload.drop").on("upload.drop", function(n, o) {
            var r = t(this)
              , u = o.originalEvent.dataTransfer.files || [];
            r.removeAttr("lay-over"),
            a(u),
            i.auto ? e.upload(u) : l(u)
        }),
        e.elemFile.off("upload.change").on("upload.change", function() {
            var t = this.files || [];
            a(t),
            i.auto ? e.upload() : l(t)
        }),
        i.bindAction.off("upload.action").on("upload.action", function() {
            e.upload()
        }),
        i.elem.data("haveEvents") || (e.elemFile.on("change", function() {
            t(this).trigger("upload.change")
        }),
        i.elem.on("click", function() {
            e.isFile() || t(this).trigger("upload.start")
        }),
        i.drag && i.elem.on("dragover", function(e) {
            e.preventDefault(),
            t(this).trigger("upload.over")
        }).on("dragleave", function(e) {
            t(this).trigger("upload.leave")
        }).on("drop", function(e) {
            e.preventDefault(),
            t(this).trigger("upload.drop", e)
        }),
        i.bindAction.on("click", function() {
            t(this).trigger("upload.action")
        }),
        i.elem.data("haveEvents", !0))
    }
    ,
    a.render = function(e) {
        var t = new p(e);
        return l.call(t)
    }
    ,
    e(r, a)
});
